package com.jeff.practice;

public class WineCupTower {
    public static void main(String[] args) {
        int poured = 5; // 倒入的酒量
        int query_row = 3; // 需要查询的行数
        int query_glass = 2; // 需要查询的杯子位置
        
        double result = champagneInGlass(poured, query_row, query_glass);
        System.out.printf("在第 %d 行的第 %d 个酒杯中有 %.2f 单位的酒\n", query_row, query_glass, result);
    }

    public static double champagneInGlass(int poured, int query_row, int query_glass) {
        // 创建一个二维数组来存储每个酒杯中的酒量
        double[][] glasses = new double[query_row + 1][];
        for (int i = 0; i <= query_row; i++) {
            glasses[i] = new double[i + 1];
        }

        // 倒入酒量
        glasses[0][0] = poured;

        // 填充酒杯塔
        for (int row = 0; row < query_row; row++) {
            for (int glass = 0; glass <= row; glass++) {
                // 如果当前杯子中的酒量超过 1，计算溢出部分
                if (glasses[row][glass] > 1) {
                    double overflow = glasses[row][glass] - 1;
                    glasses[row][glass] = 1; // 只保留 1 单位酒
                    glasses[row + 1][glass] += overflow / 2; // 左下杯子
                    glasses[row + 1][glass + 1] += overflow / 2; // 右下杯子
                }
            }
        }

        // 返回第 query_row 行的第 query_glass 个杯子中的酒量
        return glasses[query_row][query_glass];
    }
}
